from django.db import models
from django.db import models
from django.utils import timezone
# Create your models here.


class Tag(models.Model):
    """ 标签表 """
    name = models.CharField('标签名', max_length=64)   # varchar(64) comment '标签名'
    created_time = models.DateTimeField(verbose_name='创建时间', default=timezone.now)  # django中时间用自带的 timezone.now生成，假设现在10:00，数据库中存的是2:00。settings中需要正确设置时区
    last_mod_time = models.DateTimeField(verbose_name='修改时间', default=timezone.now)

    # 使对象在后台显示更友好   默认[<class Tag>,<>]   ['pyhton', 'linux']
    def __str__(self):
        return '<class Tag:{}>'.format(self.name)

    class Meta:
        verbose_name = '标签'  # 指定后台显示模型名称
        # verbose_name_plural = '标签列表'  # 指定后台显示模型复数名称
        # ordering = ['name']
        # db_table = "tag"  # 数据库表名


class Category(models.Model):
    """ 分类表\目录表 """
    name = models.CharField('类别名称', max_length=64)
    created_time = models.DateTimeField('创建时间', default=timezone.now)
    last_mod_time = models.DateTimeField('修改时间', default=timezone.now)

    class Meta:
        verbose_name = "类别名称"

    def __str__(self):
        return '<class Category:{}>'.format(self.name)


class Article(models.Model):
    """ 文章表 """
    STATUS_CHOICES = (
        ('draft', '草稿'),
        ('post', '已发表'),    # 已发表，公开
        ('private', '私人的'), # 已发表，私人可见
    )

    title = models.CharField(verbose_name='标题', max_length=50)
    content = models.TextField(verbose_name='正文', blank=True, null=True)    # charfield最大255  textfield最大6万多   blank null=True 数据库insert时这个字段可以为空。
    status = models.CharField(verbose_name='状态', max_length=20, choices=STATUS_CHOICES, default=STATUS_CHOICES[0][0])
    views = models.PositiveIntegerField(verbose_name='浏览量', default=0)
    pub_time = models.DateTimeField(verbose_name='发布时间', blank=True, null=True)

    # 外键
    category = models.ForeignKey(Category, verbose_name='分类', on_delete=models.SET_NULL, null=True, blank=True)    # foreignKey写在多的一方中。
    tags = models.ManyToManyField(Tag, verbose_name='标签集合', blank=True)        # 多对多定义在哪一方都可以

    created_time = models.DateTimeField(verbose_name='创建时间', default=timezone.now)
    last_mod_time = models.DateTimeField(verbose_name='修改时间', default=timezone.now)

    def __str__(self):
        return '<class Article:{}>'.format(self.title)

    class Meta:
        verbose_name = '文章'  # 指定后台显示模型名称
        # get_latest_by = 'created_time'




"""
分析： 
1. 文章表（id,标题，主图url地址，正文，浏览量，发布时间，最近更新时间，目录.id，标签，评论）
2. 目录表 （id,名字，创建时间，修改时间）。目录表→文章表 一对多关系(外键，最常见)。
3. 标签表 （id,名字，创建时间，修改时间）。标签表→文章表 多对多关系。
4. 文章_标签表（id, 文章.id, 标签表.id）。 # 多对多关系时发现一张表中的外键不好表达，需要一张关系映射表处理两张表的联系。
"""